#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @File   : d_io_json.py
# @Email  : xuexia_xu@feidee.com
# @Time   : 2024/4/2 14:07
# @Desc   : Python对象到JSON格式的转换


import json
import pickle

d = dict(name='Bob', age=20, score=88)

# dumps()方法返回一个str，内容就是标准的JSON
print(json.dumps(d))

json_str = '{"age": 20, "score": 88, "name": "Bob"}'
# JSON反序列化为Python对象
print(json.loads(json_str))


class Student(object):
    def __init__(self, name, age, score):
        self.name = name
        self.age = age
        self.score = score


# 可选参数default就是把任意一个对象变成一个可序列为JSON的对象，
# 我们只需要为Student专门写一个转换函数，再把函数传进去即可
def student2dict(std):
    return {
        'name': std.name,
        'age': std.age,
        'score': std.score
    }


def dict2student(d):
    return Student(d['name'], d['age'], d['score'])


s = Student('Bob', 20, 88)

# print(json.dumps(s))  #会报错，错误的原因是Student对象不是一个可序列化为JSON的对象。
print(json.dumps(s, default=student2dict))


json_str = '{"age": 20, "score": 88, "name": "Bob"}'
print(json.loads(json_str, object_hook=dict2student))

# print(json.dumps(s, default=lambda obj: obj.__dict__))
